<?php

namespace com\aristo\ingenieros\model;

include 'com/aristo/ingenieros/view/ReceiptView.php';
include 'com/aristo/ingenieros/view/ReceiptImprimirView.php';

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

use com\aristo\ingenieros\view\NumberEntityView;
use com\aristo\ingenieros\view\EntityView;
use com\aristo\ingenieros\view\ReceiptView;
use com\aristo\ingenieros\view\ReceiptImprimirView;
use \Exception;
use \mysqli;

/**
 * Description of ReceiptQuery
 *
 * @author ARISTO INGENIEROS
 */
class ReceiptQuery {

    public static function getMaxNroRecibo(mysqli $con) {
        try {
            $sql = "SELECT
                        Max(ri.numeracion)
                    FROM
                        documento AS d
                        INNER JOIN tipodocumento AS td ON d.tipodocumento_id = td.idtipodocumento
                        INNER JOIN recibo_ingreso AS ri ON d.iddocumento = ri.documento_id
                    WHERE
                        td.descripcion = 'INGRESO' AND d.anulado = 'NO'";

            $query = $con->query($sql);

            if ($query) {
                if ($query->num_rows > 0) {
                    $recibo = new NumberEntityView();
                    while ($row = $query->fetch_row()) {
                        $maxnro = utf8_decode($row[0]);
                        $recibo->setSiguiente($maxnro);
                    }
                    return $recibo->toJSON();
                } else {
                    return "NO EXISTE RECIBOS";
                }
            } else {
                return "ERROR DE RED. <br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE RECIBO: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function addRecibo($nrorecibo, $idpersona, $nrovoucher, $fecha, $detalle, mysqli $con) {
        try {
            $nrorecibo = ($nrorecibo != "") ? utf8_encode($nrorecibo) : "NULL";
            $idpersona = utf8_encode($idpersona);
            $nrovoucher = ($nrovoucher != "") ? utf8_encode($nrovoucher) : "NULL";
            $fecha = utf8_encode($fecha);

            $sqlBuscaTipo = "SELECT td.idtipodocumento FROM tipodocumento AS td WHERE td.descripcion = 'INGRESO'";

            $con->autocommit(FALSE);
            $search = $con->query($sqlBuscaTipo);

            if ($search) {
                $idtipo = "";
                while ($row = $search->fetch_row()) {
                    $idtipo = utf8_decode($row[0]);
                }

                $sql = "INSERT INTO documento (iddocumento, fecha, tipodocumento_id) VALUES (NULL, '" . $fecha . "', " . $idtipo . ")";
                $query = $con->query($sql);

                if ($query) {
                    $iddocumento = $con->insert_id;
                    $sqlrecibo = "INSERT INTO recibo_ingreso (documento_id, numeracion, cliente_id, nro_voucher) VALUES (" . $iddocumento . ", " . $nrorecibo . ", " . $idpersona . ", '" . $nrovoucher . "')";
                    $queryRecibo = $con->query($sqlrecibo);

                    //echo var_dump($queryRecibo)." ==> ".$sqlrecibo;
                    if ($queryRecibo) {
                        $sinerrorDetalle = TRUE;

                        foreach ($detalle as $item) {
                            $idconcepto = utf8_encode($item['id']);
                            //$concepto = $item['concepto'];
                            $cantidad = utf8_encode($item['cantidad']);
                            $monto = utf8_encode($item['monto']);

                            $sqldetalle = "INSERT INTO detalledocumento (documento_id, concepto_id, cantidad, valor_unitario) VALUES (" . $iddocumento . ", " . $idconcepto . ", " . $cantidad . ", '" . $monto . "')";
                            $queryDetalle = $con->query($sqldetalle);

                            if (!$queryDetalle) {
                                $sinerrorDetalle = FALSE;
                            }
                        }

                        if ($sinerrorDetalle) {
                            $rpta = new EntityView();
                            $rpta->setResponse("SUCCESS");
                            $rpta->setId($iddocumento);
                            $rpta->setDescripcion("AGREGADO CORRECTAMENTE");
                            return $rpta->toJSON();
                        } else {
                            return "ERROR DE RED.<br/><br/>Codigo1: " . $con->errno . "<br/>" . nl2br($con->error);
                        }
                    } else {
                        return "ERROR DE RED.<br/><br/>Codigo2: " . $con->errno . "<br/>" . nl2br($con->error);
                    }
                } else {
                    return "ERROR DE RED.<br/><br/>Codigo3: " . $con->errno . "<br/>" . nl2br($con->error);
                }
            } else {
                return "ERROR DE RED.<br/><br/>Codigo4: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE CUENTAS: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function getRecibos(mysqli $con) {
        try {
            $sql = "SELECT
                        d.iddocumento,
                        ri.numeracion,
                        ri.nro_voucher,
                        d.fecha,
                        p.apellido_paterno,
                        p.apellido_materno,
                        p.nombres
                    FROM
                        documento AS d
                        INNER JOIN tipodocumento AS td ON d.tipodocumento_id = td.idtipodocumento
                        INNER JOIN recibo_ingreso AS ri ON d.iddocumento = ri.documento_id
                        INNER JOIN persona AS p ON ri.cliente_id = p.idpersona
                    WHERE
                        td.descripcion = 'INGRESO' AND d.anulado = 'NO'  AND 
                        YEAR(NOW()) = YEAR(d.fecha) AND MONTH(NOW()) - 5 <= MONTH(d.fecha)";
            $query = $con->query($sql);

            if ($query) {
                if ($query->num_rows > 0) {
                    $recibos = array();
                    while ($row = $query->fetch_row()) {
                        $id = utf8_decode($row[0]);
                        $numeracion = utf8_decode($row[1]);
                        $voucher = utf8_decode($row[2]);
                        $fecha = utf8_decode($row[3]);
                        $apellidop = utf8_decode($row[4]);
                        $apellidom = utf8_decode($row[5]);
                        $nombres = utf8_decode($row[6]);

                        $recibo = new ReceiptView();
                        $recibo->setId($id);
                        $recibo->setNrorecibo($numeracion);
                        $recibo->setNrovoucher($voucher);
                        $recibo->setFecha($fecha);
                        $recibo->setPersona($apellidop . ' ' . $apellidom . ', ' . $nombres);
                        $recibos [] = $recibo->toJSON();
                    }
                    return $recibos;
                } else {
                    return "NO EXISTE RECIBOS CONFIGURADOS";
                }
            } else {
                return "ERROR DE RED. <br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE RECIBO: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

    public static function getRecibo($idDocumento, mysqli $con) {
        try {
            $sql = "SELECT
                        ri.numeracion,
                        p.apellido_paterno,
                        p.apellido_materno,
                        p.nombres,
                        p.direccion,
                        d.fecha
                    FROM
                        documento AS d
                        INNER JOIN tipodocumento AS td ON d.tipodocumento_id = td.idtipodocumento
                        INNER JOIN recibo_ingreso AS ri ON d.iddocumento = ri.documento_id
                        INNER JOIN persona AS p ON ri.cliente_id = p.idpersona
                    WHERE
                        td.descripcion = 'INGRESO' AND d.iddocumento = " . $idDocumento;
            $query = $con->query($sql);

            if ($query) {
                if ($query->num_rows > 0) {
                    $recibo = new ReceiptImprimirView();
                    while ($row = $query->fetch_row()) {
                        $numeracion = utf8_decode($row[0]);
                        $apaterno = utf8_decode($row[1]);
                        $amaterno = utf8_decode($row[2]);
                        $nombres = utf8_decode($row[3]);
                        $direccion = utf8_decode($row[4]);
                        $fecha = utf8_decode($row[5]);

                        $recibo->setNumeracion($numeracion);
                        $recibo->setApellido_paterno($apaterno);
                        $recibo->setApellido_materno($amaterno);
                        $recibo->setNombres($nombres);
                        $recibo->setDireccion($direccion);
                        $recibo->setFecha($fecha);
                    }
                    return $recibo->toJSON();
                } else {
                    return "NO EXISTE EL RECIBO";
                }
            } else {
                return "ERROR DE RED. <br/><br/>Codigo: " . $con->errno . "<br/>" . nl2br($con->error);
            }
        } catch (Exception $exc) {
            return 'ERROR EN EL MODELO DE RECIBO: ' . $exc->getMessage() . "<br/>" . nl2br($exc->getTraceAsString());
        }
    }

}